<?php namespace system\model;

use hdphp\Model\Model;

class Category extends Model{

	//数据表
	protected $table = "category";

	//完整表名
	protected $full = false;

	//自动验证
	protected $validate=[
		//['字段名','验证方法','提示信息',验证条件,验证时间]
		['cname','required','分类名称不能为空',3,3],
		['ctitle','required','分类标题不能为空',3,3],
		['cdes','required','分类描述不能为空',3,3],
		['ckeywords','required','分类关键字不能为空',3,3],
		['csort','required','分类关键字不能为空',3,3],
	];

	//自动完成
	protected $auto=[
		//['字段名','处理方法','方法类型',验证条件,验证时机]
	];

	//自动过滤
    protected $filter=[
        //[表单字段名,过滤条件,处理时间]
    ];

	//时间操作,需要表中存在created_at,updated_at字段
	protected $timestamps=false;


	//禁止插入的字段
	protected $denyInsertFields = [];

	//禁止更新的字段
	protected $denyUpdateFields = [];

	//前置方法 比如: _before_add 为添加前执行的方法
	protected function _before_add(){}
	protected function _before_delete(){}
	protected function _before_save(&$data){}

	protected function _after_add(){}
	protected function _after_delete(){}
	protected function _after_save(){}

	/**
	 *获取数据
	 */
	public function getAll(){
		//按照排序的降序进行排列
		//数组、将哪一个字段变成树状、主键 id、父 id
		//, $fieldPri = 'cid', $fieldPid = 'pid',如果你的数据库不是cid和pid，那么这两个参数必须的传
		return Data::tree($this->orderBy('csort','desc')->get(), 'cname');
	}
	/**
	 * 添加分类
	 * @return bool  返回true 或者false
	 */
	public function store(){
		//执行添加
		//$this->create();
		//p($this->data);exit;
		//form表单字段跟数据库字段保持一致
		//指定add方法的时候自动执行验证
		return $this->add();
	}
	public function getOldData($cid)
	{
		return $this->where('cid',$cid)->first();
	}

	/**
	 * 处理所属分类
	 * 不要自己以及自己的所有子集
	 */
	public function getCateData($cid)
	{
		//1.寻找当前分类的所有子集
		//$cid找谁的自己，$this->get()所有的分类数据，在哪里去找子集
		$cids = $this->getSon($cid,$this->get());
		//2.在把自己追加进去
		$cids[] = $cid;
		//3.把自己和自己子集排除掉
		return $this->whereNotIn('cid',$cids)->field(['cid','cname'])->get();
	}

	/**
	 * @param $cid
	 * @param $data
	 */
	//cid=1
	public function getSon($cid,$data)
	{
		static $temp = [];
		foreach($data as $k=>$v)
		{
			if($cid==$v['pid']){
				$temp[] = $v['cid'];
				$this->getSon($v['cid'],$data);
			}
		}
		return $temp;
	}
	public function edit()
	{
		//p($_POST);die;
		//form表单隐藏域  主键，值要更新的数据
		return $this->save();
	}

	/**
	 * 删除分类
	 */
	public function del($cid){
		//sp是我们自定义的打印函数，放在单入口文件
		// p($cid);die;
		//获取删除当前数据的pid
		$pid=$this->where('cid',$cid)->pluck('pid');
		// p($pid);die;
		//将当前所删除数据的儿子pid修改成当前pid
		$this->where('pid',$cid)->update(['pid'=>$pid]);
		// 将当前删除数据
		$re=$this->where('cid',$cid)->delete();
		// 结果为真假就反回
		if(!$re)  return false;
		return ture;
	}

}